package com.lalala.Service;

import com.lalala.Dao.ManageDAO;
import com.lalala.entity.Student;

import java.util.List;
import java.util.Map;

/**
 * 业务层<p>复杂的业务逻辑
 *
 * @author lalala
 * @createdate 2021/9/1 19:52 周三
 */
public class ManageService {
	static ManageDAO manageDAO = new ManageDAO();

	/**
	 * 添加学生<p>对学生信息进行约束
	 * @param stuID 学号
	 * @param name 姓名
	 * @param gender 性别
	 * @param birthday 生日
	 * @param phoneNumber 电话号码
	 * @return 是否成功
	 */
	public boolean add(String stuID, String name, String gender,
							  String birthday, String phoneNumber){
		if (!stuID.matches("\\d{12}")){
			System.out.println("学号必须由12位数字组成！");
			return false;
		}
		if (name.length() > 20){
			System.out.println("姓名不得超过20个字符！");
			return false;
		}
		if (!(gender.equals("male") || gender.equals("female"))){
			System.out.println("性别有误！");
			return false;
		}
		if (!birthday.matches("\\d{4}-\\d{2}-\\d{2}")){
			System.out.println("生日有误！");
			return false;
		}
		if (!phoneNumber.matches("\\d{11}")){
			System.out.println("电话号码必须由11位数字组成！");
			return false;
		}
		Student student = new Student(stuID,name,gender,birthday,phoneNumber);
		return manageDAO.add(student) != 0;
	}

	/**
	 * 删除学生（ID）
	 * @param stuID 学号
	 * @return 是否成功
	 */
	public boolean delByID(String stuID){
		if (!stuID.matches("\\d{12}")){
			System.out.println("学号必须由12位数字组成！");
			return false;
		}
		int del = manageDAO.delByID(stuID);
		if (del == 0) return false;
		else return true;
	}

	/**
	 * 修改学生信息
	 * @param stuID 学号
	 * @param op 修改项
	 * @param newInformation 新信息
	 * @return 是否成功
	 */
	public boolean alter(String stuID,String op,String newInformation){
		if (!stuID.matches("\\d{12}")){
			System.out.println("学号必须由12位数字组成！");
			return false;
		}
		boolean b = queryByID(stuID);
		if (!b) {
			System.out.println("未查询到信息！");
			return false;
		}
		Student student = getStudent(stuID);
		switch (op) {
			case "1":
				if (newInformation.length() > 20){
					System.out.println("姓名不得超过20个字符！");
					return false;
				}
				student.setName(newInformation);
				break;
			case "2":
				if (!(newInformation.equals("male") || newInformation.equals("female"))){
					System.out.println("性别有误！");
					return false;
				}
				student.setGender(newInformation);
				break;
			case "3":
				if (!newInformation.matches("\\d{4}-\\d{2}-\\d{2}")){
					System.out.println("生日有误！");
					return false;
				}
				student.setBirthday(newInformation);
				break;
			case "4":
				if (!newInformation.matches("\\d{11}")){
					System.out.println("电话号码必须由11位数字组成！");
					return false;
				}
				student.setPhoneNumber(newInformation);
				break;
			default:
				return false;
		}
		System.out.println("新:" + student);
		int alter = manageDAO.alter(student);
		if (alter == 0) return false;
		else return true;
	}

	/**
	 * 获取数据库中的学生信息（ID）
	 * @param stuID 学号
	 * @return 学生对象
	 */
	public Student getStudent(String stuID) {
		if (!stuID.matches("\\d{12}")){
			System.out.println("学号必须由12位数字组成！");
			return null;
		}
		return manageDAO.getStudent(stuID);
	}

	/**
	 * 查询学生信息（ID）
	 * @param stuID 学号
	 * @return 是否查询到信息
	 */
	public boolean queryByID(String stuID){
		if (!stuID.matches("\\d{12}")){
			System.out.println("学号必须由12位数字组成！");
			return false;
		}
		Map<String, Object> stringObjectMap = manageDAO.queryInformationByID(stuID);
		if (stringObjectMap == null){
			return false;
		} else {
			System.out.println(stringObjectMap);
			return true;
		}
	}

	/**
	 * 查询全部学生信息
	 * @return 查询到几条结果
	 */
	public int queryAll() {
		List<Map<String, Object>> maps = manageDAO.queryInformationAll();
		for (Map<String, Object> map : maps) {
			System.out.println(map);
		}
		return maps.size();
	}
}
